home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / ATUtilities.lha / ATUtilities / BASIC / CDLOAD.BAS < prev    next >
BASIC Source File  |  2000-09-26  |  4KB  |  212 lines

  1. $INCLUDE "REGNAMES.INC"
  2. DIM names$(1500)
  3. DIM length&(1500)
  4. mem$=STRING$(16384,CHR$(0))
  5. mem.seg=STRSEG(mem$)
  6. mem.ofs=STRPTR(mem$)
  7. COLOR 14
  8.  
  9. IF CheckVector(&H49)=0 THEN
  10.  SOUND 2000,2
  11.  PRINT "FEHLER: ATUtilities File Transfer ist nicht installiert!"
  12.  GOTO ende
  13. END IF
  14. GOSUB CmdAuswertung
  15.  
  16. REG %AX,(&H6*256)
  17. CALL INTERRUPT &H49
  18. segment=REG(%ES)
  19. offset=REG(%DI)
  20.  
  21. DEF SEG = segment
  22. a$=a$+CHR$(0)
  23. FOR i=1 TO LEN(a$)
  24.  POKE offset+i-1,ASC(MID$(a$,i,1))
  25. NEXT
  26.  
  27. REG %AX,(12*256)
  28. CALL INTERRUPT &H49
  29. IF REG(%BX)=10000 THEN
  30.  fl=REG(%CX)
  31.  REG %BX,fl
  32.  REG %AX,(14*256)
  33.  CALL INTERRUPT &H49
  34.  i=0 : ok=0 : xdir$=""
  35.  WHILE ok=0
  36.   x$=CHR$(PEEK(offset+i))
  37.   IF x$<>CHR$(0) THEN xdir$=xdir$+x$ ELSE ok=1
  38.   i=i+1
  39.  WEND
  40.  IF RIGHT$(xdir$,1)<>":" THEN xdir$=xdir$+"/"
  41.  COLOR 11
  42.  PRINT "Verzeichnis: ";
  43.  PRINT xdir$
  44.  PRINT ""
  45.  REG %BX,fl
  46.  REG %AX,(13*256)
  47.  CALL INTERRUPT &H49
  48. ELSE
  49.  SOUND 2000,2
  50.  PRINT "Verzeichnis ";a$;"ist nicht vorhanden/Zugriff verweigert."
  51.  GOTO ende
  52. END IF
  53.  
  54. FOR i=1 TO LEN(a$)
  55.  POKE offset+i-1,ASC(MID$(a$,i,1))
  56. NEXT
  57.  
  58. REG %AX,(11*256)
  59. CALL INTERRUPT &H49
  60. IF REG(%BX)=10000 THEN
  61.  DEF SEG = segment
  62.  anz=REG(%CX)
  63.  COLOR 14
  64.  count=0
  65.  ofs=offset+44
  66.  FOR i=1 TO anz
  67.   typ=PEEK(ofs+36)
  68.   IF typ<>1 THEN
  69.    names$(count)=""
  70.    FOR j=0 TO 29
  71.     names$(count)=names$(count)+CHR$(PEEK(ofs+j))
  72.    NEXT
  73.    length&(count)=PEEKL(ofs+30)
  74.    count=count+1
  75.   END IF
  76.   ofs=ofs+44
  77.  NEXT
  78.  IF count>0 THEN
  79.   FOR i=0 TO count-1
  80.    n$=names$(i)
  81.    l&=length&(i)
  82.    COLOR 14
  83.    PRINT n$;
  84.    LOCATE ,40
  85.    COLOR 11
  86.    PRINT "0 %";
  87.  
  88.    xn$=xdir$+n$+CHR$(0)
  89.    DEF SEG = segment
  90.    FOR j=0 TO LEN(xn$)-1
  91.     POKE offset+j,ASC(MID$(xn$,j+1,1))
  92.    NEXT
  93.    REG %AX,0
  94.    REG %BX,1
  95.    CALL INTERRUPT &H49
  96.    IF REG(%BX)=10000 THEN
  97.     fh=REG(%CX)
  98.  
  99.     REG %DS,STRSEG(n$)
  100.     REG %DX,STRPTR(n$)
  101.     REG %AX,&H3C*256
  102.     REG %CX,0
  103.     CALL INTERRUPT &H21
  104.     IF (REG(%FLAGS) MOD 2)=0 THEN
  105.      pc=REG(%AX)
  106.      t&=0 : fehler=0
  107.      WHILE t&<l& AND fehler=0
  108.       REG %AX,2*256
  109.       REG %BX,fh
  110.       REG %CX,16384
  111.       CALL INTERRUPT &H49
  112.       bytes=REG(%BX)
  113.       t&=t&+bytes
  114.       IF bytes=0 AND t&<l& THEN
  115.        fehler=1
  116.        LOCATE ,40
  117.        PRINT "Fehler beim Lesen!"
  118.       ELSE
  119.        REG %AX,5*256
  120.        REG %BX,mem.seg
  121.        REG %DX,mem.ofs
  122.        REG %CX,bytes
  123.        CALL INTERRUPT &H49
  124.        REG %AX,&H40*256
  125.        REG %BX,pc
  126.        REG %CX,bytes
  127.        REG %DS,mem.seg
  128.        REG %DX,mem.ofs
  129.        CALL INTERRUPT &H21
  130.        IF (REG(%FLAGS) MOD 2)=1 THEN
  131.     fehler=1
  132.     LOCATE ,40
  133.     PRINT "Fehler beim Schreiben, Fehler";REG(%AX);"."
  134.        ELSE
  135.     p&=(100*t&)/l&
  136.     LOCATE ,39
  137.     PRINT p&;"%";
  138.        END IF
  139.       END IF
  140.      WEND
  141.  
  142.      REG %AX,&H3E*256
  143.      REG %BX,pc
  144.      CALL INTERRUPT &H21
  145.     ELSE
  146.      LOCATE ,40
  147.      PRINT "Kann Datei nicht erstellen, Fehler";REG(%AX);"."
  148.     END IF
  149.  
  150.     REG %AX,1*256
  151.     REG %BX,fh
  152.     CALL INTERRUPT &H49
  153.    ELSE
  154.     LOCATE ,40
  155.     PRINT "Kann Datei nicht ”ffnen!"
  156.    END IF
  157.    PRINT ""
  158.    IF INKEY$=CHR$(27) THEN i=count
  159.   NEXT
  160.  ELSE
  161.   SOUND 2000,2
  162.   PRINT "Das Verzeichnis enth„lt keine Dateien."
  163.  END IF
  164. ELSE
  165.  SOUND 2000,2
  166.  PRINT "Zugriff auf Amiga-Verzeichnis ";a$;"verweigert."
  167. END IF
  168.  
  169. ende:
  170. COLOR 7
  171. END
  172.  
  173. CmdAuswertung:
  174. cmd$=COMMAND$
  175. a$=cmd$
  176. IF a$="/?" OR a$="?" THEN
  177.  GOTO argf
  178. END IF
  179. IF a$="" THEN a$=STRING$(20,CHR$(0))
  180. RETURN
  181.  
  182. argf:
  183. SOUND 2000,2
  184. PRINT "CDLoad - Version 1.0  Copyright (C) 1994 by Thomas Dreibholz"
  185. PRINT ""
  186. PRINT "CDLoad kopiere alle Dateien aus dem angegebenen Amiga-Verzeichnis"
  187. PRINT "in das aktuelle PC-Verzeichnis."
  188. PRINT ""
  189. PRINT "Aufruf: CDLoad {Amiga-Verzeichnis | ? | /?}"
  190. PRINT ""
  191. GOTO ende
  192.  
  193.  
  194. FUNCTION CheckVector(num) STATIC
  195.  REG %AX,(&H35*256)+num
  196.  CALL INTERRUPT &H21
  197.  segm=REG(%ES)
  198.  offs=REG(%BX)
  199.  DEF SEG = segm
  200.  IF (segm=0) OR (PEEK(offs)=207) THEN
  201.   CheckVector=0
  202.  ELSE
  203.   CheckVector=1
  204.  END IF
  205. END FUNCTION
  206.  
  207. FUNCTION Format$(num,c$) STATIC
  208.  n$=STR$(num)
  209.  n$=MID$(n$,2,LEN(n$)-1)
  210.  IF LEN(n$)=1 THEN n$=c$+n$
  211.  Format$=n$
  212. END FUNCTION